#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：python_learning 
@File ：状态模式.py
@IDE  ：PyCharm 
@Author ：李涵彬
@Date ：2024/3/1 23:24 
"""

"""
状态模式 (State Pattern)
状态模式是一种行为型设计模式，它允许对象在内部状态发生改变时改变它的行为。状态模式将状态封装成独立的类，并将行为委托到代表当前状态的对象。

在 Python 中，状态模式通常通过一个上下文类和多个具体状态类来实现。以下是一个简单的示例：

在这个示例中，State 是抽象状态类，定义了状态的接口方法 handle。ConcreteStateA 和 ConcreteStateB 是具体状态类，实现了不同状态下的行为。

Context 是上下文类，维护了当前的状态对象，并提供了设置状态和请求的方法。在请求方法中，通过委托当前状态对象来处理请求。

客户端代码创建具体状态对象和上下文对象，并在运行时决定当前的状态对象，然后通过上下文对象来发起请求。

状态模式适用于对象的行为取决于它的状态，并且需要根据状态改变对象的行为的情况。通过使用状态模式，可以使得状态转换更加明确和可控，同时也提高了代码的可维护性和可扩展性。
"""

from abc import ABC, abstractmethod


# 抽象状态类
class State(ABC):
	@abstractmethod
	def handle(self):
		pass


# 具体状态类 - 状态A
class ConcreteStateA(State):
	def handle(self):
		print("当前处于状态A")


# 具体状态类 - 状态B
class ConcreteStateB(State):
	def handle(self):
		print("当前处于状态B")


# 上下文类
class Context:
	def __init__(self):
		self._state = None

	def set_state(self, state):
		self._state = state

	def request(self):
		self._state.handle()


# 客户端代码
if __name__ == "__main__":
	context = Context()

	state_a = ConcreteStateA()
	state_b = ConcreteStateB()

	context.set_state(state_a)
	context.request()

	context.set_state(state_b)
	context.request()
